package com.bmps.springcloud.insuredmicroservice.repository.calculate.coresystem;


import com.bmps.springcloud.insuredmicroservice.model.accept.InsureaccModel;
import com.bmps.springcloud.insuredmicroservice.model.accept.LcPolModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author jackdaw
 */
@Repository
public interface AccountValueRepository {
    /**
     * 历史单
     *
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return 保单信息
     */

    List<LcPolModel> queryHistoryPolicy(@Param("prtno") String prtNo, @Param("insuredno") String insuredNo);

    /**
     * 查询万能险账户信息
     *
     * @param contNo 保单号
     * @return 信息
     */
    List<InsureaccModel> queryUniversal(@NotBlank @Param("contno") String contNo);

    /**
     * 查询投联险账户价值
     *
     * @param contNo 保单号
     * @return 金额
     */
    BigDecimal queryInvestment(@NotBlank @Param("contno") String contNo);

    /**
     * 查询投联险和万能账户信息
     *
     * @param contNos  contNo集合
     * @param riskType 3-投联 4-万能
     * @return double
     */
    List<Map<String, Object>> queryAccount(@NotEmpty Set<String> contNos, @Param("risktype") String riskType);

    /**
     * 查询  UnitPriceSell
     *
     * @param insuaccno 账号
     * @return Double
     */
    Double queryUnitPriceSell(@Param("insuaccno") String insuaccno);

    /**
     * 查询利率指针和balatype
     *
     * @param riskCode 险种号
     * @param date     生效日期
     * @return 利率指针和balatype
     */
    List<Map<String, Object>> queryPointerCodeAndBalaType(@Param("riskcode") String riskCode, @Param("date") Date date);

    /**
     * 查询指针最大公布利率止期
     *
     * @param pointerCode 利率指针
     * @return 最大公布利率止期
     */
    Date queryMaxRateEndDate(@Param("pointercode") String pointerCode);

    /**
     * 查询帐户子表信息
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @return 账户信息
     */
    List<Map<String, Object>> queryInsureAccClass(@Param("polno") String polNo, @Param("insuaccno") String insuaccno);

    /**
     * 查询计算日期小于账户结余日期
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @param date      date
     * @return double
     */
    BigDecimal queryClassMoneyBala(@Param("polno") String polNo, @Param("insuaccno") String insuaccno, @Param("date") Date date);

    /**
     * 截止最后一次结余
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @param date      date
     * @return double
     */
    BigDecimal queryClassMoney(@Param("polno") String polNo, @Param("insuaccno") String insuaccno, @Param("date") Date date);

    /**
     * 账户余额
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @param date      date
     * @return double
     */
    Double queryStandMoney(@Param("polno") String polNo, @Param("insuaccno") String insuaccno, @Param("date") Date date);

    /**
     * 获得本月度所有的交易金额
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @param date      date
     * @param lastDate  lastDate
     * @return double
     */
    List<Map<String, Object>> queryMonthMoney(@Param("polno") String polNo, @Param("insuaccno") String insuaccno, @Param("date") Date date, @Param("lastdate") Date lastDate);

    /**
     * 本月记录
     *
     * @param polNo     polNo
     * @param insuaccno insuaccno
     * @return double
     */
    double queryMoreMoney(@Param("polno") String polNo, @Param("insuaccno") String insuaccno);

    /**
     * 查询BalaRate
     *
     * @param startDate 起始
     * @param endDate   截止
     * @param riskCode  险种
     * @param cvalidate 生效日期
     * @return rate, ed
     */
    List<Map<String, Object>> queryBalaRate(@Param("startdate") Date startDate, @Param("enddate") Date endDate, @Param("riskcode") String riskCode, @Param("cvalidate") Date cvalidate);

    /**
     * 查询GurantRate
     *
     * @param startDate 起始
     * @param endDate   截止
     * @param riskCode  险种
     * @param cvalidate 生效日期
     * @return rate, ed
     */
    List<Map<String, Object>> queryGurantRate(@Param("startdate") Date startDate, @Param("enddate") Date endDate, @Param("riskcode") String riskCode, @Param("cvalidate") Date cvalidate);

    /**
     * 查询主险
     *
     * @param prtNo 投保单号
     * @return 主险信息
     */
    LcPolModel queryMainPol(@Param("prtno") String prtNo);


}
